package com.hlxl.viewpoint.service.persistence;

import com.hlxl.viewpoint.NoSuchViewPointException;
import com.hlxl.viewpoint.model.ViewPoint;
import com.hlxl.viewpoint.model.impl.ViewPointImpl;
import com.hlxl.viewpoint.model.impl.ViewPointModelImpl;
import com.hlxl.viewpoint.service.persistence.ViewPointPersistence;

import com.liferay.portal.kernel.cache.CacheRegistryUtil;
import com.liferay.portal.kernel.dao.orm.EntityCacheUtil;
import com.liferay.portal.kernel.dao.orm.FinderCacheUtil;
import com.liferay.portal.kernel.dao.orm.FinderPath;
import com.liferay.portal.kernel.dao.orm.Query;
import com.liferay.portal.kernel.dao.orm.QueryPos;
import com.liferay.portal.kernel.dao.orm.QueryUtil;
import com.liferay.portal.kernel.dao.orm.Session;
import com.liferay.portal.kernel.exception.SystemException;
import com.liferay.portal.kernel.log.Log;
import com.liferay.portal.kernel.log.LogFactoryUtil;
import com.liferay.portal.kernel.util.CharPool;
import com.liferay.portal.kernel.util.GetterUtil;
import com.liferay.portal.kernel.util.InstanceFactory;
import com.liferay.portal.kernel.util.OrderByComparator;
import com.liferay.portal.kernel.util.PropsKeys;
import com.liferay.portal.kernel.util.PropsUtil;
import com.liferay.portal.kernel.util.SetUtil;
import com.liferay.portal.kernel.util.StringBundler;
import com.liferay.portal.kernel.util.StringPool;
import com.liferay.portal.kernel.util.StringUtil;
import com.liferay.portal.kernel.util.UnmodifiableList;
import com.liferay.portal.kernel.util.Validator;
import com.liferay.portal.kernel.uuid.PortalUUIDUtil;
import com.liferay.portal.model.CacheModel;
import com.liferay.portal.model.ModelListener;
import com.liferay.portal.service.persistence.impl.BasePersistenceImpl;

import java.io.Serializable;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Set;

/**
 * The persistence implementation for the view point service.
 *
 * <p>
 * Caching information and settings can be found in <code>portal.properties</code>
 * </p>
 *
 * @author Brian Wing Shun Chan
 * @see ViewPointPersistence
 * @see ViewPointUtil
 * @generated
 */
public class ViewPointPersistenceImpl extends BasePersistenceImpl<ViewPoint>
    implements ViewPointPersistence {
    /*
     * NOTE FOR DEVELOPERS:
     *
     * Never modify or reference this class directly. Always use {@link ViewPointUtil} to access the view point persistence. Modify <code>service.xml</code> and rerun ServiceBuilder to regenerate this class.
     */
    public static final String FINDER_CLASS_NAME_ENTITY = ViewPointImpl.class.getName();
    public static final String FINDER_CLASS_NAME_LIST_WITH_PAGINATION = FINDER_CLASS_NAME_ENTITY +
        ".List1";
    public static final String FINDER_CLASS_NAME_LIST_WITHOUT_PAGINATION = FINDER_CLASS_NAME_ENTITY +
        ".List2";
    public static final FinderPath FINDER_PATH_WITH_PAGINATION_FIND_ALL = new FinderPath(ViewPointModelImpl.ENTITY_CACHE_ENABLED,
            ViewPointModelImpl.FINDER_CACHE_ENABLED, ViewPointImpl.class,
            FINDER_CLASS_NAME_LIST_WITH_PAGINATION, "findAll", new String[0]);
    public static final FinderPath FINDER_PATH_WITHOUT_PAGINATION_FIND_ALL = new FinderPath(ViewPointModelImpl.ENTITY_CACHE_ENABLED,
            ViewPointModelImpl.FINDER_CACHE_ENABLED, ViewPointImpl.class,
            FINDER_CLASS_NAME_LIST_WITHOUT_PAGINATION, "findAll", new String[0]);
    public static final FinderPath FINDER_PATH_COUNT_ALL = new FinderPath(ViewPointModelImpl.ENTITY_CACHE_ENABLED,
            ViewPointModelImpl.FINDER_CACHE_ENABLED, Long.class,
            FINDER_CLASS_NAME_LIST_WITHOUT_PAGINATION, "countAll", new String[0]);
    public static final FinderPath FINDER_PATH_WITH_PAGINATION_FIND_BY_UUID = new FinderPath(ViewPointModelImpl.ENTITY_CACHE_ENABLED,
            ViewPointModelImpl.FINDER_CACHE_ENABLED, ViewPointImpl.class,
            FINDER_CLASS_NAME_LIST_WITH_PAGINATION, "findByUuid",
            new String[] {
                String.class.getName(),
                
            Integer.class.getName(), Integer.class.getName(),
                OrderByComparator.class.getName()
            });
    public static final FinderPath FINDER_PATH_WITHOUT_PAGINATION_FIND_BY_UUID = new FinderPath(ViewPointModelImpl.ENTITY_CACHE_ENABLED,
            ViewPointModelImpl.FINDER_CACHE_ENABLED, ViewPointImpl.class,
            FINDER_CLASS_NAME_LIST_WITHOUT_PAGINATION, "findByUuid",
            new String[] { String.class.getName() },
            ViewPointModelImpl.UUID_COLUMN_BITMASK);
    public static final FinderPath FINDER_PATH_COUNT_BY_UUID = new FinderPath(ViewPointModelImpl.ENTITY_CACHE_ENABLED,
            ViewPointModelImpl.FINDER_CACHE_ENABLED, Long.class,
            FINDER_CLASS_NAME_LIST_WITHOUT_PAGINATION, "countByUuid",
            new String[] { String.class.getName() });
    private static final String _FINDER_COLUMN_UUID_UUID_1 = "viewPoint.uuid IS NULL";
    private static final String _FINDER_COLUMN_UUID_UUID_2 = "viewPoint.uuid = ?";
    private static final String _FINDER_COLUMN_UUID_UUID_3 = "(viewPoint.uuid IS NULL OR viewPoint.uuid = '')";
    public static final FinderPath FINDER_PATH_WITH_PAGINATION_FIND_BY_NAME = new FinderPath(ViewPointModelImpl.ENTITY_CACHE_ENABLED,
            ViewPointModelImpl.FINDER_CACHE_ENABLED, ViewPointImpl.class,
            FINDER_CLASS_NAME_LIST_WITH_PAGINATION, "findByName",
            new String[] {
                String.class.getName(),
                
            Integer.class.getName(), Integer.class.getName(),
                OrderByComparator.class.getName()
            });
    public static final FinderPath FINDER_PATH_WITH_PAGINATION_COUNT_BY_NAME = new FinderPath(ViewPointModelImpl.ENTITY_CACHE_ENABLED,
            ViewPointModelImpl.FINDER_CACHE_ENABLED, Long.class,
            FINDER_CLASS_NAME_LIST_WITH_PAGINATION, "countByName",
            new String[] { String.class.getName() });
    private static final String _FINDER_COLUMN_NAME_NAME_1 = "viewPoint.name LIKE NULL";
    private static final String _FINDER_COLUMN_NAME_NAME_2 = "viewPoint.name LIKE ?";
    private static final String _FINDER_COLUMN_NAME_NAME_3 = "(viewPoint.name IS NULL OR viewPoint.name LIKE '')";
    private static final String _SQL_SELECT_VIEWPOINT = "SELECT viewPoint FROM ViewPoint viewPoint";
    private static final String _SQL_SELECT_VIEWPOINT_WHERE = "SELECT viewPoint FROM ViewPoint viewPoint WHERE ";
    private static final String _SQL_COUNT_VIEWPOINT = "SELECT COUNT(viewPoint) FROM ViewPoint viewPoint";
    private static final String _SQL_COUNT_VIEWPOINT_WHERE = "SELECT COUNT(viewPoint) FROM ViewPoint viewPoint WHERE ";
    private static final String _ORDER_BY_ENTITY_ALIAS = "viewPoint.";
    private static final String _NO_SUCH_ENTITY_WITH_PRIMARY_KEY = "No ViewPoint exists with the primary key ";
    private static final String _NO_SUCH_ENTITY_WITH_KEY = "No ViewPoint exists with the key {";
    private static final boolean _HIBERNATE_CACHE_USE_SECOND_LEVEL_CACHE = GetterUtil.getBoolean(PropsUtil.get(
                PropsKeys.HIBERNATE_CACHE_USE_SECOND_LEVEL_CACHE));
    private static Log _log = LogFactoryUtil.getLog(ViewPointPersistenceImpl.class);
    private static Set<String> _badColumnNames = SetUtil.fromArray(new String[] {
                "uuid", "id"
            });
    private static ViewPoint _nullViewPoint = new ViewPointImpl() {
            @Override
            public Object clone() {
                return this;
            }

            @Override
            public CacheModel<ViewPoint> toCacheModel() {
                return _nullViewPointCacheModel;
            }
        };

    private static CacheModel<ViewPoint> _nullViewPointCacheModel = new CacheModel<ViewPoint>() {
            @Override
            public ViewPoint toEntityModel() {
                return _nullViewPoint;
            }
        };

    public ViewPointPersistenceImpl() {
        setModelClass(ViewPoint.class);
    }

    /**
     * Returns all the view points where uuid = &#63;.
     *
     * @param uuid the uuid
     * @return the matching view points
     * @throws SystemException if a system exception occurred
     */
    @Override
    public List<ViewPoint> findByUuid(String uuid) throws SystemException {
        return findByUuid(uuid, QueryUtil.ALL_POS, QueryUtil.ALL_POS, null);
    }

    /**
     * Returns a range of all the view points where uuid = &#63;.
     *
     * <p>
     * Useful when paginating results. Returns a maximum of <code>end - start</code> instances. <code>start</code> and <code>end</code> are not primary keys, they are indexes in the result set. Thus, <code>0</code> refers to the first result in the set. Setting both <code>start</code> and <code>end</code> to {@link com.liferay.portal.kernel.dao.orm.QueryUtil#ALL_POS} will return the full result set. If <code>orderByComparator</code> is specified, then the query will include the given ORDER BY logic. If <code>orderByComparator</code> is absent and pagination is required (<code>start</code> and <code>end</code> are not {@link com.liferay.portal.kernel.dao.orm.QueryUtil#ALL_POS}), then the query will include the default ORDER BY logic from {@link com.hlxl.viewpoint.model.impl.ViewPointModelImpl}. If both <code>orderByComparator</code> and pagination are absent, for performance reasons, the query will not have an ORDER BY clause and the returned result set will be sorted on by the primary key in an ascending order.
     * </p>
     *
     * @param uuid the uuid
     * @param start the lower bound of the range of view points
     * @param end the upper bound of the range of view points (not inclusive)
     * @return the range of matching view points
     * @throws SystemException if a system exception occurred
     */
    @Override
    public List<ViewPoint> findByUuid(String uuid, int start, int end)
        throws SystemException {
        return findByUuid(uuid, start, end, null);
    }

    /**
     * Returns an ordered range of all the view points where uuid = &#63;.
     *
     * <p>
     * Useful when paginating results. Returns a maximum of <code>end - start</code> instances. <code>start</code> and <code>end</code> are not primary keys, they are indexes in the result set. Thus, <code>0</code> refers to the first result in the set. Setting both <code>start</code> and <code>end</code> to {@link com.liferay.portal.kernel.dao.orm.QueryUtil#ALL_POS} will return the full result set. If <code>orderByComparator</code> is specified, then the query will include the given ORDER BY logic. If <code>orderByComparator</code> is absent and pagination is required (<code>start</code> and <code>end</code> are not {@link com.liferay.portal.kernel.dao.orm.QueryUtil#ALL_POS}), then the query will include the default ORDER BY logic from {@link com.hlxl.viewpoint.model.impl.ViewPointModelImpl}. If both <code>orderByComparator</code> and pagination are absent, for performance reasons, the query will not have an ORDER BY clause and the returned result set will be sorted on by the primary key in an ascending order.
     * </p>
     *
     * @param uuid the uuid
     * @param start the lower bound of the range of view points
     * @param end the upper bound of the range of view points (not inclusive)
     * @param orderByComparator the comparator to order the results by (optionally <code>null</code>)
     * @return the ordered range of matching view points
     * @throws SystemException if a system exception occurred
     */
    @Override
    public List<ViewPoint> findByUuid(String uuid, int start, int end,
        OrderByComparator orderByComparator) throws SystemException {
        boolean pagination = true;
        FinderPath finderPath = null;
        Object[] finderArgs = null;

        if ((start == QueryUtil.ALL_POS) && (end == QueryUtil.ALL_POS) &&
                (orderByComparator == null)) {
            pagination = false;
            finderPath = FINDER_PATH_WITHOUT_PAGINATION_FIND_BY_UUID;
            finderArgs = new Object[] { uuid };
        } else {
            finderPath = FINDER_PATH_WITH_PAGINATION_FIND_BY_UUID;
            finderArgs = new Object[] { uuid, start, end, orderByComparator };
        }

        List<ViewPoint> list = (List<ViewPoint>) FinderCacheUtil.getResult(finderPath,
                finderArgs, this);

        if ((list != null) && !list.isEmpty()) {
            for (ViewPoint viewPoint : list) {
                if (!Validator.equals(uuid, viewPoint.getUuid())) {
                    list = null;

                    break;
                }
            }
        }

        if (list == null) {
            StringBundler query = null;

            if (orderByComparator != null) {
                query = new StringBundler(3 +
                        (orderByComparator.getOrderByFields().length * 3));
            } else {
                query = new StringBundler(3);
            }

            query.append(_SQL_SELECT_VIEWPOINT_WHERE);

            boolean bindUuid = false;

            if (uuid == null) {
                query.append(_FINDER_COLUMN_UUID_UUID_1);
            } else if (uuid.equals(StringPool.BLANK)) {
                query.append(_FINDER_COLUMN_UUID_UUID_3);
            } else {
                bindUuid = true;

                query.append(_FINDER_COLUMN_UUID_UUID_2);
            }

            if (orderByComparator != null) {
                appendOrderByComparator(query, _ORDER_BY_ENTITY_ALIAS,
                    orderByComparator);
            } else
             if (pagination) {
                query.append(ViewPointModelImpl.ORDER_BY_JPQL);
            }

            String sql = query.toString();

            Session session = null;

            try {
                session = openSession();

                Query q = session.createQuery(sql);

                QueryPos qPos = QueryPos.getInstance(q);

                if (bindUuid) {
                    qPos.add(uuid);
                }

                if (!pagination) {
                    list = (List<ViewPoint>) QueryUtil.list(q, getDialect(),
                            start, end, false);

                    Collections.sort(list);

                    list = new UnmodifiableList<ViewPoint>(list);
                } else {
                    list = (List<ViewPoint>) QueryUtil.list(q, getDialect(),
                            start, end);
                }

                cacheResult(list);

                FinderCacheUtil.putResult(finderPath, finderArgs, list);
            } catch (Exception e) {
                FinderCacheUtil.removeResult(finderPath, finderArgs);

                throw processException(e);
            } finally {
                closeSession(session);
            }
        }

        return list;
    }

    /**
     * Returns the first view point in the ordered set where uuid = &#63;.
     *
     * @param uuid the uuid
     * @param orderByComparator the comparator to order the set by (optionally <code>null</code>)
     * @return the first matching view point
     * @throws com.hlxl.viewpoint.NoSuchViewPointException if a matching view point could not be found
     * @throws SystemException if a system exception occurred
     */
    @Override
    public ViewPoint findByUuid_First(String uuid,
        OrderByComparator orderByComparator)
        throws NoSuchViewPointException, SystemException {
        ViewPoint viewPoint = fetchByUuid_First(uuid, orderByComparator);

        if (viewPoint != null) {
            return viewPoint;
        }

        StringBundler msg = new StringBundler(4);

        msg.append(_NO_SUCH_ENTITY_WITH_KEY);

        msg.append("uuid=");
        msg.append(uuid);

        msg.append(StringPool.CLOSE_CURLY_BRACE);

        throw new NoSuchViewPointException(msg.toString());
    }

    /**
     * Returns the first view point in the ordered set where uuid = &#63;.
     *
     * @param uuid the uuid
     * @param orderByComparator the comparator to order the set by (optionally <code>null</code>)
     * @return the first matching view point, or <code>null</code> if a matching view point could not be found
     * @throws SystemException if a system exception occurred
     */
    @Override
    public ViewPoint fetchByUuid_First(String uuid,
        OrderByComparator orderByComparator) throws SystemException {
        List<ViewPoint> list = findByUuid(uuid, 0, 1, orderByComparator);

        if (!list.isEmpty()) {
            return list.get(0);
        }

        return null;
    }

    /**
     * Returns the last view point in the ordered set where uuid = &#63;.
     *
     * @param uuid the uuid
     * @param orderByComparator the comparator to order the set by (optionally <code>null</code>)
     * @return the last matching view point
     * @throws com.hlxl.viewpoint.NoSuchViewPointException if a matching view point could not be found
     * @throws SystemException if a system exception occurred
     */
    @Override
    public ViewPoint findByUuid_Last(String uuid,
        OrderByComparator orderByComparator)
        throws NoSuchViewPointException, SystemException {
        ViewPoint viewPoint = fetchByUuid_Last(uuid, orderByComparator);

        if (viewPoint != null) {
            return viewPoint;
        }

        StringBundler msg = new StringBundler(4);

        msg.append(_NO_SUCH_ENTITY_WITH_KEY);

        msg.append("uuid=");
        msg.append(uuid);

        msg.append(StringPool.CLOSE_CURLY_BRACE);

        throw new NoSuchViewPointException(msg.toString());
    }

    /**
     * Returns the last view point in the ordered set where uuid = &#63;.
     *
     * @param uuid the uuid
     * @param orderByComparator the comparator to order the set by (optionally <code>null</code>)
     * @return the last matching view point, or <code>null</code> if a matching view point could not be found
     * @throws SystemException if a system exception occurred
     */
    @Override
    public ViewPoint fetchByUuid_Last(String uuid,
        OrderByComparator orderByComparator) throws SystemException {
        int count = countByUuid(uuid);

        if (count == 0) {
            return null;
        }

        List<ViewPoint> list = findByUuid(uuid, count - 1, count,
                orderByComparator);

        if (!list.isEmpty()) {
            return list.get(0);
        }

        return null;
    }

    /**
     * Returns the view points before and after the current view point in the ordered set where uuid = &#63;.
     *
     * @param id the primary key of the current view point
     * @param uuid the uuid
     * @param orderByComparator the comparator to order the set by (optionally <code>null</code>)
     * @return the previous, current, and next view point
     * @throws com.hlxl.viewpoint.NoSuchViewPointException if a view point with the primary key could not be found
     * @throws SystemException if a system exception occurred
     */
    @Override
    public ViewPoint[] findByUuid_PrevAndNext(long id, String uuid,
        OrderByComparator orderByComparator)
        throws NoSuchViewPointException, SystemException {
        ViewPoint viewPoint = findByPrimaryKey(id);

        Session session = null;

        try {
            session = openSession();

            ViewPoint[] array = new ViewPointImpl[3];

            array[0] = getByUuid_PrevAndNext(session, viewPoint, uuid,
                    orderByComparator, true);

            array[1] = viewPoint;

            array[2] = getByUuid_PrevAndNext(session, viewPoint, uuid,
                    orderByComparator, false);

            return array;
        } catch (Exception e) {
            throw processException(e);
        } finally {
            closeSession(session);
        }
    }

    protected ViewPoint getByUuid_PrevAndNext(Session session,
        ViewPoint viewPoint, String uuid, OrderByComparator orderByComparator,
        boolean previous) {
        StringBundler query = null;

        if (orderByComparator != null) {
            query = new StringBundler(6 +
                    (orderByComparator.getOrderByFields().length * 6));
        } else {
            query = new StringBundler(3);
        }

        query.append(_SQL_SELECT_VIEWPOINT_WHERE);

        boolean bindUuid = false;

        if (uuid == null) {
            query.append(_FINDER_COLUMN_UUID_UUID_1);
        } else if (uuid.equals(StringPool.BLANK)) {
            query.append(_FINDER_COLUMN_UUID_UUID_3);
        } else {
            bindUuid = true;

            query.append(_FINDER_COLUMN_UUID_UUID_2);
        }

        if (orderByComparator != null) {
            String[] orderByConditionFields = orderByComparator.getOrderByConditionFields();

            if (orderByConditionFields.length > 0) {
                query.append(WHERE_AND);
            }

            for (int i = 0; i < orderByConditionFields.length; i++) {
                query.append(_ORDER_BY_ENTITY_ALIAS);
                query.append(orderByConditionFields[i]);

                if ((i + 1) < orderByConditionFields.length) {
                    if (orderByComparator.isAscending() ^ previous) {
                        query.append(WHERE_GREATER_THAN_HAS_NEXT);
                    } else {
                        query.append(WHERE_LESSER_THAN_HAS_NEXT);
                    }
                } else {
                    if (orderByComparator.isAscending() ^ previous) {
                        query.append(WHERE_GREATER_THAN);
                    } else {
                        query.append(WHERE_LESSER_THAN);
                    }
                }
            }

            query.append(ORDER_BY_CLAUSE);

            String[] orderByFields = orderByComparator.getOrderByFields();

            for (int i = 0; i < orderByFields.length; i++) {
                query.append(_ORDER_BY_ENTITY_ALIAS);
                query.append(orderByFields[i]);

                if ((i + 1) < orderByFields.length) {
                    if (orderByComparator.isAscending() ^ previous) {
                        query.append(ORDER_BY_ASC_HAS_NEXT);
                    } else {
                        query.append(ORDER_BY_DESC_HAS_NEXT);
                    }
                } else {
                    if (orderByComparator.isAscending() ^ previous) {
                        query.append(ORDER_BY_ASC);
                    } else {
                        query.append(ORDER_BY_DESC);
                    }
                }
            }
        } else {
            query.append(ViewPointModelImpl.ORDER_BY_JPQL);
        }

        String sql = query.toString();

        Query q = session.createQuery(sql);

        q.setFirstResult(0);
        q.setMaxResults(2);

        QueryPos qPos = QueryPos.getInstance(q);

        if (bindUuid) {
            qPos.add(uuid);
        }

        if (orderByComparator != null) {
            Object[] values = orderByComparator.getOrderByConditionValues(viewPoint);

            for (Object value : values) {
                qPos.add(value);
            }
        }

        List<ViewPoint> list = q.list();

        if (list.size() == 2) {
            return list.get(1);
        } else {
            return null;
        }
    }

    /**
     * Removes all the view points where uuid = &#63; from the database.
     *
     * @param uuid the uuid
     * @throws SystemException if a system exception occurred
     */
    @Override
    public void removeByUuid(String uuid) throws SystemException {
        for (ViewPoint viewPoint : findByUuid(uuid, QueryUtil.ALL_POS,
                QueryUtil.ALL_POS, null)) {
            remove(viewPoint);
        }
    }

    /**
     * Returns the number of view points where uuid = &#63;.
     *
     * @param uuid the uuid
     * @return the number of matching view points
     * @throws SystemException if a system exception occurred
     */
    @Override
    public int countByUuid(String uuid) throws SystemException {
        FinderPath finderPath = FINDER_PATH_COUNT_BY_UUID;

        Object[] finderArgs = new Object[] { uuid };

        Long count = (Long) FinderCacheUtil.getResult(finderPath, finderArgs,
                this);

        if (count == null) {
            StringBundler query = new StringBundler(2);

            query.append(_SQL_COUNT_VIEWPOINT_WHERE);

            boolean bindUuid = false;

            if (uuid == null) {
                query.append(_FINDER_COLUMN_UUID_UUID_1);
            } else if (uuid.equals(StringPool.BLANK)) {
                query.append(_FINDER_COLUMN_UUID_UUID_3);
            } else {
                bindUuid = true;

                query.append(_FINDER_COLUMN_UUID_UUID_2);
            }

            String sql = query.toString();

            Session session = null;

            try {
                session = openSession();

                Query q = session.createQuery(sql);

                QueryPos qPos = QueryPos.getInstance(q);

                if (bindUuid) {
                    qPos.add(uuid);
                }

                count = (Long) q.uniqueResult();

                FinderCacheUtil.putResult(finderPath, finderArgs, count);
            } catch (Exception e) {
                FinderCacheUtil.removeResult(finderPath, finderArgs);

                throw processException(e);
            } finally {
                closeSession(session);
            }
        }

        return count.intValue();
    }

    /**
     * Returns all the view points where name LIKE &#63;.
     *
     * @param name the name
     * @return the matching view points
     * @throws SystemException if a system exception occurred
     */
    @Override
    public List<ViewPoint> findByName(String name) throws SystemException {
        return findByName(name, QueryUtil.ALL_POS, QueryUtil.ALL_POS, null);
    }

    /**
     * Returns a range of all the view points where name LIKE &#63;.
     *
     * <p>
     * Useful when paginating results. Returns a maximum of <code>end - start</code> instances. <code>start</code> and <code>end</code> are not primary keys, they are indexes in the result set. Thus, <code>0</code> refers to the first result in the set. Setting both <code>start</code> and <code>end</code> to {@link com.liferay.portal.kernel.dao.orm.QueryUtil#ALL_POS} will return the full result set. If <code>orderByComparator</code> is specified, then the query will include the given ORDER BY logic. If <code>orderByComparator</code> is absent and pagination is required (<code>start</code> and <code>end</code> are not {@link com.liferay.portal.kernel.dao.orm.QueryUtil#ALL_POS}), then the query will include the default ORDER BY logic from {@link com.hlxl.viewpoint.model.impl.ViewPointModelImpl}. If both <code>orderByComparator</code> and pagination are absent, for performance reasons, the query will not have an ORDER BY clause and the returned result set will be sorted on by the primary key in an ascending order.
     * </p>
     *
     * @param name the name
     * @param start the lower bound of the range of view points
     * @param end the upper bound of the range of view points (not inclusive)
     * @return the range of matching view points
     * @throws SystemException if a system exception occurred
     */
    @Override
    public List<ViewPoint> findByName(String name, int start, int end)
        throws SystemException {
        return findByName(name, start, end, null);
    }

    /**
     * Returns an ordered range of all the view points where name LIKE &#63;.
     *
     * <p>
     * Useful when paginating results. Returns a maximum of <code>end - start</code> instances. <code>start</code> and <code>end</code> are not primary keys, they are indexes in the result set. Thus, <code>0</code> refers to the first result in the set. Setting both <code>start</code> and <code>end</code> to {@link com.liferay.portal.kernel.dao.orm.QueryUtil#ALL_POS} will return the full result set. If <code>orderByComparator</code> is specified, then the query will include the given ORDER BY logic. If <code>orderByComparator</code> is absent and pagination is required (<code>start</code> and <code>end</code> are not {@link com.liferay.portal.kernel.dao.orm.QueryUtil#ALL_POS}), then the query will include the default ORDER BY logic from {@link com.hlxl.viewpoint.model.impl.ViewPointModelImpl}. If both <code>orderByComparator</code> and pagination are absent, for performance reasons, the query will not have an ORDER BY clause and the returned result set will be sorted on by the primary key in an ascending order.
     * </p>
     *
     * @param name the name
     * @param start the lower bound of the range of view points
     * @param end the upper bound of the range of view points (not inclusive)
     * @param orderByComparator the comparator to order the results by (optionally <code>null</code>)
     * @return the ordered range of matching view points
     * @throws SystemException if a system exception occurred
     */
    @Override
    public List<ViewPoint> findByName(String name, int start, int end,
        OrderByComparator orderByComparator) throws SystemException {
        boolean pagination = true;
        FinderPath finderPath = null;
        Object[] finderArgs = null;

        finderPath = FINDER_PATH_WITH_PAGINATION_FIND_BY_NAME;
        finderArgs = new Object[] { name, start, end, orderByComparator };

        List<ViewPoint> list = (List<ViewPoint>) FinderCacheUtil.getResult(finderPath,
                finderArgs, this);

        if ((list != null) && !list.isEmpty()) {
            for (ViewPoint viewPoint : list) {
                if (!StringUtil.wildcardMatches(viewPoint.getName(), name,
                            CharPool.UNDERLINE, CharPool.PERCENT,
                            CharPool.BACK_SLASH, true)) {
                    list = null;

                    break;
                }
            }
        }

        if (list == null) {
            StringBundler query = null;

            if (orderByComparator != null) {
                query = new StringBundler(3 +
                        (orderByComparator.getOrderByFields().length * 3));
            } else {
                query = new StringBundler(3);
            }

            query.append(_SQL_SELECT_VIEWPOINT_WHERE);

            boolean bindName = false;

            if (name == null) {
                query.append(_FINDER_COLUMN_NAME_NAME_1);
            } else if (name.equals(StringPool.BLANK)) {
                query.append(_FINDER_COLUMN_NAME_NAME_3);
            } else {
                bindName = true;

                query.append(_FINDER_COLUMN_NAME_NAME_2);
            }

            if (orderByComparator != null) {
                appendOrderByComparator(query, _ORDER_BY_ENTITY_ALIAS,
                    orderByComparator);
            } else
             if (pagination) {
                query.append(ViewPointModelImpl.ORDER_BY_JPQL);
            }

            String sql = query.toString();

            Session session = null;

            try {
                session = openSession();

                Query q = session.createQuery(sql);

                QueryPos qPos = QueryPos.getInstance(q);

                if (bindName) {
                    qPos.add(name);
                }

                if (!pagination) {
                    list = (List<ViewPoint>) QueryUtil.list(q, getDialect(),
                            start, end, false);

                    Collections.sort(list);

                    list = new UnmodifiableList<ViewPoint>(list);
                } else {
                    list = (List<ViewPoint>) QueryUtil.list(q, getDialect(),
                            start, end);
                }

                cacheResult(list);

                FinderCacheUtil.putResult(finderPath, finderArgs, list);
            } catch (Exception e) {
                FinderCacheUtil.removeResult(finderPath, finderArgs);

                throw processException(e);
            } finally {
                closeSession(session);
            }
        }

        return list;
    }

    /**
     * Returns the first view point in the ordered set where name LIKE &#63;.
     *
     * @param name the name
     * @param orderByComparator the comparator to order the set by (optionally <code>null</code>)
     * @return the first matching view point
     * @throws com.hlxl.viewpoint.NoSuchViewPointException if a matching view point could not be found
     * @throws SystemException if a system exception occurred
     */
    @Override
    public ViewPoint findByName_First(String name,
        OrderByComparator orderByComparator)
        throws NoSuchViewPointException, SystemException {
        ViewPoint viewPoint = fetchByName_First(name, orderByComparator);

        if (viewPoint != null) {
            return viewPoint;
        }

        StringBundler msg = new StringBundler(4);

        msg.append(_NO_SUCH_ENTITY_WITH_KEY);

        msg.append("name=");
        msg.append(name);

        msg.append(StringPool.CLOSE_CURLY_BRACE);

        throw new NoSuchViewPointException(msg.toString());
    }

    /**
     * Returns the first view point in the ordered set where name LIKE &#63;.
     *
     * @param name the name
     * @param orderByComparator the comparator to order the set by (optionally <code>null</code>)
     * @return the first matching view point, or <code>null</code> if a matching view point could not be found
     * @throws SystemException if a system exception occurred
     */
    @Override
    public ViewPoint fetchByName_First(String name,
        OrderByComparator orderByComparator) throws SystemException {
        List<ViewPoint> list = findByName(name, 0, 1, orderByComparator);

        if (!list.isEmpty()) {
            return list.get(0);
        }

        return null;
    }

    /**
     * Returns the last view point in the ordered set where name LIKE &#63;.
     *
     * @param name the name
     * @param orderByComparator the comparator to order the set by (optionally <code>null</code>)
     * @return the last matching view point
     * @throws com.hlxl.viewpoint.NoSuchViewPointException if a matching view point could not be found
     * @throws SystemException if a system exception occurred
     */
    @Override
    public ViewPoint findByName_Last(String name,
        OrderByComparator orderByComparator)
        throws NoSuchViewPointException, SystemException {
        ViewPoint viewPoint = fetchByName_Last(name, orderByComparator);

        if (viewPoint != null) {
            return viewPoint;
        }

        StringBundler msg = new StringBundler(4);

        msg.append(_NO_SUCH_ENTITY_WITH_KEY);

        msg.append("name=");
        msg.append(name);

        msg.append(StringPool.CLOSE_CURLY_BRACE);

        throw new NoSuchViewPointException(msg.toString());
    }

    /**
     * Returns the last view point in the ordered set where name LIKE &#63;.
     *
     * @param name the name
     * @param orderByComparator the comparator to order the set by (optionally <code>null</code>)
     * @return the last matching view point, or <code>null</code> if a matching view point could not be found
     * @throws SystemException if a system exception occurred
     */
    @Override
    public ViewPoint fetchByName_Last(String name,
        OrderByComparator orderByComparator) throws SystemException {
        int count = countByName(name);

        if (count == 0) {
            return null;
        }

        List<ViewPoint> list = findByName(name, count - 1, count,
                orderByComparator);

        if (!list.isEmpty()) {
            return list.get(0);
        }

        return null;
    }

    /**
     * Returns the view points before and after the current view point in the ordered set where name LIKE &#63;.
     *
     * @param id the primary key of the current view point
     * @param name the name
     * @param orderByComparator the comparator to order the set by (optionally <code>null</code>)
     * @return the previous, current, and next view point
     * @throws com.hlxl.viewpoint.NoSuchViewPointException if a view point with the primary key could not be found
     * @throws SystemException if a system exception occurred
     */
    @Override
    public ViewPoint[] findByName_PrevAndNext(long id, String name,
        OrderByComparator orderByComparator)
        throws NoSuchViewPointException, SystemException {
        ViewPoint viewPoint = findByPrimaryKey(id);

        Session session = null;

        try {
            session = openSession();

            ViewPoint[] array = new ViewPointImpl[3];

            array[0] = getByName_PrevAndNext(session, viewPoint, name,
                    orderByComparator, true);

            array[1] = viewPoint;

            array[2] = getByName_PrevAndNext(session, viewPoint, name,
                    orderByComparator, false);

            return array;
        } catch (Exception e) {
            throw processException(e);
        } finally {
            closeSession(session);
        }
    }

    protected ViewPoint getByName_PrevAndNext(Session session,
        ViewPoint viewPoint, String name, OrderByComparator orderByComparator,
        boolean previous) {
        StringBundler query = null;

        if (orderByComparator != null) {
            query = new StringBundler(6 +
                    (orderByComparator.getOrderByFields().length * 6));
        } else {
            query = new StringBundler(3);
        }

        query.append(_SQL_SELECT_VIEWPOINT_WHERE);

        boolean bindName = false;

        if (name == null) {
            query.append(_FINDER_COLUMN_NAME_NAME_1);
        } else if (name.equals(StringPool.BLANK)) {
            query.append(_FINDER_COLUMN_NAME_NAME_3);
        } else {
            bindName = true;

            query.append(_FINDER_COLUMN_NAME_NAME_2);
        }

        if (orderByComparator != null) {
            String[] orderByConditionFields = orderByComparator.getOrderByConditionFields();

            if (orderByConditionFields.length > 0) {
                query.append(WHERE_AND);
            }

            for (int i = 0; i < orderByConditionFields.length; i++) {
                query.append(_ORDER_BY_ENTITY_ALIAS);
                query.append(orderByConditionFields[i]);

                if ((i + 1) < orderByConditionFields.length) {
                    if (orderByComparator.isAscending() ^ previous) {
                        query.append(WHERE_GREATER_THAN_HAS_NEXT);
                    } else {
                        query.append(WHERE_LESSER_THAN_HAS_NEXT);
                    }
                } else {
                    if (orderByComparator.isAscending() ^ previous) {
                        query.append(WHERE_GREATER_THAN);
                    } else {
                        query.append(WHERE_LESSER_THAN);
                    }
                }
            }

            query.append(ORDER_BY_CLAUSE);

            String[] orderByFields = orderByComparator.getOrderByFields();

            for (int i = 0; i < orderByFields.length; i++) {
                query.append(_ORDER_BY_ENTITY_ALIAS);
                query.append(orderByFields[i]);

                if ((i + 1) < orderByFields.length) {
                    if (orderByComparator.isAscending() ^ previous) {
                        query.append(ORDER_BY_ASC_HAS_NEXT);
                    } else {
                        query.append(ORDER_BY_DESC_HAS_NEXT);
                    }
                } else {
                    if (orderByComparator.isAscending() ^ previous) {
                        query.append(ORDER_BY_ASC);
                    } else {
                        query.append(ORDER_BY_DESC);
                    }
                }
            }
        } else {
            query.append(ViewPointModelImpl.ORDER_BY_JPQL);
        }

        String sql = query.toString();

        Query q = session.createQuery(sql);

        q.setFirstResult(0);
        q.setMaxResults(2);

        QueryPos qPos = QueryPos.getInstance(q);

        if (bindName) {
            qPos.add(name);
        }

        if (orderByComparator != null) {
            Object[] values = orderByComparator.getOrderByConditionValues(viewPoint);

            for (Object value : values) {
                qPos.add(value);
            }
        }

        List<ViewPoint> list = q.list();

        if (list.size() == 2) {
            return list.get(1);
        } else {
            return null;
        }
    }

    /**
     * Removes all the view points where name LIKE &#63; from the database.
     *
     * @param name the name
     * @throws SystemException if a system exception occurred
     */
    @Override
    public void removeByName(String name) throws SystemException {
        for (ViewPoint viewPoint : findByName(name, QueryUtil.ALL_POS,
                QueryUtil.ALL_POS, null)) {
            remove(viewPoint);
        }
    }

    /**
     * Returns the number of view points where name LIKE &#63;.
     *
     * @param name the name
     * @return the number of matching view points
     * @throws SystemException if a system exception occurred
     */
    @Override
    public int countByName(String name) throws SystemException {
        FinderPath finderPath = FINDER_PATH_WITH_PAGINATION_COUNT_BY_NAME;

        Object[] finderArgs = new Object[] { name };

        Long count = (Long) FinderCacheUtil.getResult(finderPath, finderArgs,
                this);

        if (count == null) {
            StringBundler query = new StringBundler(2);

            query.append(_SQL_COUNT_VIEWPOINT_WHERE);

            boolean bindName = false;

            if (name == null) {
                query.append(_FINDER_COLUMN_NAME_NAME_1);
            } else if (name.equals(StringPool.BLANK)) {
                query.append(_FINDER_COLUMN_NAME_NAME_3);
            } else {
                bindName = true;

                query.append(_FINDER_COLUMN_NAME_NAME_2);
            }

            String sql = query.toString();

            Session session = null;

            try {
                session = openSession();

                Query q = session.createQuery(sql);

                QueryPos qPos = QueryPos.getInstance(q);

                if (bindName) {
                    qPos.add(name);
                }

                count = (Long) q.uniqueResult();

                FinderCacheUtil.putResult(finderPath, finderArgs, count);
            } catch (Exception e) {
                FinderCacheUtil.removeResult(finderPath, finderArgs);

                throw processException(e);
            } finally {
                closeSession(session);
            }
        }

        return count.intValue();
    }

    /**
     * Caches the view point in the entity cache if it is enabled.
     *
     * @param viewPoint the view point
     */
    @Override
    public void cacheResult(ViewPoint viewPoint) {
        EntityCacheUtil.putResult(ViewPointModelImpl.ENTITY_CACHE_ENABLED,
            ViewPointImpl.class, viewPoint.getPrimaryKey(), viewPoint);

        viewPoint.resetOriginalValues();
    }

    /**
     * Caches the view points in the entity cache if it is enabled.
     *
     * @param viewPoints the view points
     */
    @Override
    public void cacheResult(List<ViewPoint> viewPoints) {
        for (ViewPoint viewPoint : viewPoints) {
            if (EntityCacheUtil.getResult(
                        ViewPointModelImpl.ENTITY_CACHE_ENABLED,
                        ViewPointImpl.class, viewPoint.getPrimaryKey()) == null) {
                cacheResult(viewPoint);
            } else {
                viewPoint.resetOriginalValues();
            }
        }
    }

    /**
     * Clears the cache for all view points.
     *
     * <p>
     * The {@link com.liferay.portal.kernel.dao.orm.EntityCache} and {@link com.liferay.portal.kernel.dao.orm.FinderCache} are both cleared by this method.
     * </p>
     */
    @Override
    public void clearCache() {
        if (_HIBERNATE_CACHE_USE_SECOND_LEVEL_CACHE) {
            CacheRegistryUtil.clear(ViewPointImpl.class.getName());
        }

        EntityCacheUtil.clearCache(ViewPointImpl.class.getName());

        FinderCacheUtil.clearCache(FINDER_CLASS_NAME_ENTITY);
        FinderCacheUtil.clearCache(FINDER_CLASS_NAME_LIST_WITH_PAGINATION);
        FinderCacheUtil.clearCache(FINDER_CLASS_NAME_LIST_WITHOUT_PAGINATION);
    }

    /**
     * Clears the cache for the view point.
     *
     * <p>
     * The {@link com.liferay.portal.kernel.dao.orm.EntityCache} and {@link com.liferay.portal.kernel.dao.orm.FinderCache} are both cleared by this method.
     * </p>
     */
    @Override
    public void clearCache(ViewPoint viewPoint) {
        EntityCacheUtil.removeResult(ViewPointModelImpl.ENTITY_CACHE_ENABLED,
            ViewPointImpl.class, viewPoint.getPrimaryKey());

        FinderCacheUtil.clearCache(FINDER_CLASS_NAME_LIST_WITH_PAGINATION);
        FinderCacheUtil.clearCache(FINDER_CLASS_NAME_LIST_WITHOUT_PAGINATION);
    }

    @Override
    public void clearCache(List<ViewPoint> viewPoints) {
        FinderCacheUtil.clearCache(FINDER_CLASS_NAME_LIST_WITH_PAGINATION);
        FinderCacheUtil.clearCache(FINDER_CLASS_NAME_LIST_WITHOUT_PAGINATION);

        for (ViewPoint viewPoint : viewPoints) {
            EntityCacheUtil.removeResult(ViewPointModelImpl.ENTITY_CACHE_ENABLED,
                ViewPointImpl.class, viewPoint.getPrimaryKey());
        }
    }

    /**
     * Creates a new view point with the primary key. Does not add the view point to the database.
     *
     * @param id the primary key for the new view point
     * @return the new view point
     */
    @Override
    public ViewPoint create(long id) {
        ViewPoint viewPoint = new ViewPointImpl();

        viewPoint.setNew(true);
        viewPoint.setPrimaryKey(id);

        String uuid = PortalUUIDUtil.generate();

        viewPoint.setUuid(uuid);

        return viewPoint;
    }

    /**
     * Removes the view point with the primary key from the database. Also notifies the appropriate model listeners.
     *
     * @param id the primary key of the view point
     * @return the view point that was removed
     * @throws com.hlxl.viewpoint.NoSuchViewPointException if a view point with the primary key could not be found
     * @throws SystemException if a system exception occurred
     */
    @Override
    public ViewPoint remove(long id)
        throws NoSuchViewPointException, SystemException {
        return remove((Serializable) id);
    }

    /**
     * Removes the view point with the primary key from the database. Also notifies the appropriate model listeners.
     *
     * @param primaryKey the primary key of the view point
     * @return the view point that was removed
     * @throws com.hlxl.viewpoint.NoSuchViewPointException if a view point with the primary key could not be found
     * @throws SystemException if a system exception occurred
     */
    @Override
    public ViewPoint remove(Serializable primaryKey)
        throws NoSuchViewPointException, SystemException {
        Session session = null;

        try {
            session = openSession();

            ViewPoint viewPoint = (ViewPoint) session.get(ViewPointImpl.class,
                    primaryKey);

            if (viewPoint == null) {
                if (_log.isWarnEnabled()) {
                    _log.warn(_NO_SUCH_ENTITY_WITH_PRIMARY_KEY + primaryKey);
                }

                throw new NoSuchViewPointException(_NO_SUCH_ENTITY_WITH_PRIMARY_KEY +
                    primaryKey);
            }

            return remove(viewPoint);
        } catch (NoSuchViewPointException nsee) {
            throw nsee;
        } catch (Exception e) {
            throw processException(e);
        } finally {
            closeSession(session);
        }
    }

    @Override
    protected ViewPoint removeImpl(ViewPoint viewPoint)
        throws SystemException {
        viewPoint = toUnwrappedModel(viewPoint);

        Session session = null;

        try {
            session = openSession();

            if (!session.contains(viewPoint)) {
                viewPoint = (ViewPoint) session.get(ViewPointImpl.class,
                        viewPoint.getPrimaryKeyObj());
            }

            if (viewPoint != null) {
                session.delete(viewPoint);
            }
        } catch (Exception e) {
            throw processException(e);
        } finally {
            closeSession(session);
        }

        if (viewPoint != null) {
            clearCache(viewPoint);
        }

        return viewPoint;
    }

    @Override
    public ViewPoint updateImpl(com.hlxl.viewpoint.model.ViewPoint viewPoint)
        throws SystemException {
        viewPoint = toUnwrappedModel(viewPoint);

        boolean isNew = viewPoint.isNew();

        ViewPointModelImpl viewPointModelImpl = (ViewPointModelImpl) viewPoint;

        if (Validator.isNull(viewPoint.getUuid())) {
            String uuid = PortalUUIDUtil.generate();

            viewPoint.setUuid(uuid);
        }

        Session session = null;

        try {
            session = openSession();

            if (viewPoint.isNew()) {
                session.save(viewPoint);

                viewPoint.setNew(false);
            } else {
                session.merge(viewPoint);
            }
        } catch (Exception e) {
            throw processException(e);
        } finally {
            closeSession(session);
        }

        FinderCacheUtil.clearCache(FINDER_CLASS_NAME_LIST_WITH_PAGINATION);

        if (isNew || !ViewPointModelImpl.COLUMN_BITMASK_ENABLED) {
            FinderCacheUtil.clearCache(FINDER_CLASS_NAME_LIST_WITHOUT_PAGINATION);
        }
        else {
            if ((viewPointModelImpl.getColumnBitmask() &
                    FINDER_PATH_WITHOUT_PAGINATION_FIND_BY_UUID.getColumnBitmask()) != 0) {
                Object[] args = new Object[] {
                        viewPointModelImpl.getOriginalUuid()
                    };

                FinderCacheUtil.removeResult(FINDER_PATH_COUNT_BY_UUID, args);
                FinderCacheUtil.removeResult(FINDER_PATH_WITHOUT_PAGINATION_FIND_BY_UUID,
                    args);

                args = new Object[] { viewPointModelImpl.getUuid() };

                FinderCacheUtil.removeResult(FINDER_PATH_COUNT_BY_UUID, args);
                FinderCacheUtil.removeResult(FINDER_PATH_WITHOUT_PAGINATION_FIND_BY_UUID,
                    args);
            }
        }

        EntityCacheUtil.putResult(ViewPointModelImpl.ENTITY_CACHE_ENABLED,
            ViewPointImpl.class, viewPoint.getPrimaryKey(), viewPoint);

        return viewPoint;
    }

    protected ViewPoint toUnwrappedModel(ViewPoint viewPoint) {
        if (viewPoint instanceof ViewPointImpl) {
            return viewPoint;
        }

        ViewPointImpl viewPointImpl = new ViewPointImpl();

        viewPointImpl.setNew(viewPoint.isNew());
        viewPointImpl.setPrimaryKey(viewPoint.getPrimaryKey());

        viewPointImpl.setUuid(viewPoint.getUuid());
        viewPointImpl.setId(viewPoint.getId());
        viewPointImpl.setName(viewPoint.getName());
        viewPointImpl.setPicId(viewPoint.getPicId());

        return viewPointImpl;
    }

    /**
     * Returns the view point with the primary key or throws a {@link com.liferay.portal.NoSuchModelException} if it could not be found.
     *
     * @param primaryKey the primary key of the view point
     * @return the view point
     * @throws com.hlxl.viewpoint.NoSuchViewPointException if a view point with the primary key could not be found
     * @throws SystemException if a system exception occurred
     */
    @Override
    public ViewPoint findByPrimaryKey(Serializable primaryKey)
        throws NoSuchViewPointException, SystemException {
        ViewPoint viewPoint = fetchByPrimaryKey(primaryKey);

        if (viewPoint == null) {
            if (_log.isWarnEnabled()) {
                _log.warn(_NO_SUCH_ENTITY_WITH_PRIMARY_KEY + primaryKey);
            }

            throw new NoSuchViewPointException(_NO_SUCH_ENTITY_WITH_PRIMARY_KEY +
                primaryKey);
        }

        return viewPoint;
    }

    /**
     * Returns the view point with the primary key or throws a {@link com.hlxl.viewpoint.NoSuchViewPointException} if it could not be found.
     *
     * @param id the primary key of the view point
     * @return the view point
     * @throws com.hlxl.viewpoint.NoSuchViewPointException if a view point with the primary key could not be found
     * @throws SystemException if a system exception occurred
     */
    @Override
    public ViewPoint findByPrimaryKey(long id)
        throws NoSuchViewPointException, SystemException {
        return findByPrimaryKey((Serializable) id);
    }

    /**
     * Returns the view point with the primary key or returns <code>null</code> if it could not be found.
     *
     * @param primaryKey the primary key of the view point
     * @return the view point, or <code>null</code> if a view point with the primary key could not be found
     * @throws SystemException if a system exception occurred
     */
    @Override
    public ViewPoint fetchByPrimaryKey(Serializable primaryKey)
        throws SystemException {
        ViewPoint viewPoint = (ViewPoint) EntityCacheUtil.getResult(ViewPointModelImpl.ENTITY_CACHE_ENABLED,
                ViewPointImpl.class, primaryKey);

        if (viewPoint == _nullViewPoint) {
            return null;
        }

        if (viewPoint == null) {
            Session session = null;

            try {
                session = openSession();

                viewPoint = (ViewPoint) session.get(ViewPointImpl.class,
                        primaryKey);

                if (viewPoint != null) {
                    cacheResult(viewPoint);
                } else {
                    EntityCacheUtil.putResult(ViewPointModelImpl.ENTITY_CACHE_ENABLED,
                        ViewPointImpl.class, primaryKey, _nullViewPoint);
                }
            } catch (Exception e) {
                EntityCacheUtil.removeResult(ViewPointModelImpl.ENTITY_CACHE_ENABLED,
                    ViewPointImpl.class, primaryKey);

                throw processException(e);
            } finally {
                closeSession(session);
            }
        }

        return viewPoint;
    }

    /**
     * Returns the view point with the primary key or returns <code>null</code> if it could not be found.
     *
     * @param id the primary key of the view point
     * @return the view point, or <code>null</code> if a view point with the primary key could not be found
     * @throws SystemException if a system exception occurred
     */
    @Override
    public ViewPoint fetchByPrimaryKey(long id) throws SystemException {
        return fetchByPrimaryKey((Serializable) id);
    }

    /**
     * Returns all the view points.
     *
     * @return the view points
     * @throws SystemException if a system exception occurred
     */
    @Override
    public List<ViewPoint> findAll() throws SystemException {
        return findAll(QueryUtil.ALL_POS, QueryUtil.ALL_POS, null);
    }

    /**
     * Returns a range of all the view points.
     *
     * <p>
     * Useful when paginating results. Returns a maximum of <code>end - start</code> instances. <code>start</code> and <code>end</code> are not primary keys, they are indexes in the result set. Thus, <code>0</code> refers to the first result in the set. Setting both <code>start</code> and <code>end</code> to {@link com.liferay.portal.kernel.dao.orm.QueryUtil#ALL_POS} will return the full result set. If <code>orderByComparator</code> is specified, then the query will include the given ORDER BY logic. If <code>orderByComparator</code> is absent and pagination is required (<code>start</code> and <code>end</code> are not {@link com.liferay.portal.kernel.dao.orm.QueryUtil#ALL_POS}), then the query will include the default ORDER BY logic from {@link com.hlxl.viewpoint.model.impl.ViewPointModelImpl}. If both <code>orderByComparator</code> and pagination are absent, for performance reasons, the query will not have an ORDER BY clause and the returned result set will be sorted on by the primary key in an ascending order.
     * </p>
     *
     * @param start the lower bound of the range of view points
     * @param end the upper bound of the range of view points (not inclusive)
     * @return the range of view points
     * @throws SystemException if a system exception occurred
     */
    @Override
    public List<ViewPoint> findAll(int start, int end)
        throws SystemException {
        return findAll(start, end, null);
    }

    /**
     * Returns an ordered range of all the view points.
     *
     * <p>
     * Useful when paginating results. Returns a maximum of <code>end - start</code> instances. <code>start</code> and <code>end</code> are not primary keys, they are indexes in the result set. Thus, <code>0</code> refers to the first result in the set. Setting both <code>start</code> and <code>end</code> to {@link com.liferay.portal.kernel.dao.orm.QueryUtil#ALL_POS} will return the full result set. If <code>orderByComparator</code> is specified, then the query will include the given ORDER BY logic. If <code>orderByComparator</code> is absent and pagination is required (<code>start</code> and <code>end</code> are not {@link com.liferay.portal.kernel.dao.orm.QueryUtil#ALL_POS}), then the query will include the default ORDER BY logic from {@link com.hlxl.viewpoint.model.impl.ViewPointModelImpl}. If both <code>orderByComparator</code> and pagination are absent, for performance reasons, the query will not have an ORDER BY clause and the returned result set will be sorted on by the primary key in an ascending order.
     * </p>
     *
     * @param start the lower bound of the range of view points
     * @param end the upper bound of the range of view points (not inclusive)
     * @param orderByComparator the comparator to order the results by (optionally <code>null</code>)
     * @return the ordered range of view points
     * @throws SystemException if a system exception occurred
     */
    @Override
    public List<ViewPoint> findAll(int start, int end,
        OrderByComparator orderByComparator) throws SystemException {
        boolean pagination = true;
        FinderPath finderPath = null;
        Object[] finderArgs = null;

        if ((start == QueryUtil.ALL_POS) && (end == QueryUtil.ALL_POS) &&
                (orderByComparator == null)) {
            pagination = false;
            finderPath = FINDER_PATH_WITHOUT_PAGINATION_FIND_ALL;
            finderArgs = FINDER_ARGS_EMPTY;
        } else {
            finderPath = FINDER_PATH_WITH_PAGINATION_FIND_ALL;
            finderArgs = new Object[] { start, end, orderByComparator };
        }

        List<ViewPoint> list = (List<ViewPoint>) FinderCacheUtil.getResult(finderPath,
                finderArgs, this);

        if (list == null) {
            StringBundler query = null;
            String sql = null;

            if (orderByComparator != null) {
                query = new StringBundler(2 +
                        (orderByComparator.getOrderByFields().length * 3));

                query.append(_SQL_SELECT_VIEWPOINT);

                appendOrderByComparator(query, _ORDER_BY_ENTITY_ALIAS,
                    orderByComparator);

                sql = query.toString();
            } else {
                sql = _SQL_SELECT_VIEWPOINT;

                if (pagination) {
                    sql = sql.concat(ViewPointModelImpl.ORDER_BY_JPQL);
                }
            }

            Session session = null;

            try {
                session = openSession();

                Query q = session.createQuery(sql);

                if (!pagination) {
                    list = (List<ViewPoint>) QueryUtil.list(q, getDialect(),
                            start, end, false);

                    Collections.sort(list);

                    list = new UnmodifiableList<ViewPoint>(list);
                } else {
                    list = (List<ViewPoint>) QueryUtil.list(q, getDialect(),
                            start, end);
                }

                cacheResult(list);

                FinderCacheUtil.putResult(finderPath, finderArgs, list);
            } catch (Exception e) {
                FinderCacheUtil.removeResult(finderPath, finderArgs);

                throw processException(e);
            } finally {
                closeSession(session);
            }
        }

        return list;
    }

    /**
     * Removes all the view points from the database.
     *
     * @throws SystemException if a system exception occurred
     */
    @Override
    public void removeAll() throws SystemException {
        for (ViewPoint viewPoint : findAll()) {
            remove(viewPoint);
        }
    }

    /**
     * Returns the number of view points.
     *
     * @return the number of view points
     * @throws SystemException if a system exception occurred
     */
    @Override
    public int countAll() throws SystemException {
        Long count = (Long) FinderCacheUtil.getResult(FINDER_PATH_COUNT_ALL,
                FINDER_ARGS_EMPTY, this);

        if (count == null) {
            Session session = null;

            try {
                session = openSession();

                Query q = session.createQuery(_SQL_COUNT_VIEWPOINT);

                count = (Long) q.uniqueResult();

                FinderCacheUtil.putResult(FINDER_PATH_COUNT_ALL,
                    FINDER_ARGS_EMPTY, count);
            } catch (Exception e) {
                FinderCacheUtil.removeResult(FINDER_PATH_COUNT_ALL,
                    FINDER_ARGS_EMPTY);

                throw processException(e);
            } finally {
                closeSession(session);
            }
        }

        return count.intValue();
    }

    @Override
    protected Set<String> getBadColumnNames() {
        return _badColumnNames;
    }

    /**
     * Initializes the view point persistence.
     */
    public void afterPropertiesSet() {
        String[] listenerClassNames = StringUtil.split(GetterUtil.getString(
                    com.liferay.util.service.ServiceProps.get(
                        "value.object.listener.com.hlxl.viewpoint.model.ViewPoint")));

        if (listenerClassNames.length > 0) {
            try {
                List<ModelListener<ViewPoint>> listenersList = new ArrayList<ModelListener<ViewPoint>>();

                for (String listenerClassName : listenerClassNames) {
                    listenersList.add((ModelListener<ViewPoint>) InstanceFactory.newInstance(
                            getClassLoader(), listenerClassName));
                }

                listeners = listenersList.toArray(new ModelListener[listenersList.size()]);
            } catch (Exception e) {
                _log.error(e);
            }
        }
    }

    public void destroy() {
        EntityCacheUtil.removeCache(ViewPointImpl.class.getName());
        FinderCacheUtil.removeCache(FINDER_CLASS_NAME_ENTITY);
        FinderCacheUtil.removeCache(FINDER_CLASS_NAME_LIST_WITH_PAGINATION);
        FinderCacheUtil.removeCache(FINDER_CLASS_NAME_LIST_WITHOUT_PAGINATION);
    }
}
